"""
page.py文件，封装定位元素方法和输入内容
对象层：
1、维护、管理元素定位方式---》通过实例属性来进行管理
2、定位界面上所有需要使用的元素对象--》通过实例方法来进行定位
操作层：
1、封装对象库层中所有元素对象的操作方法
2、另外一种理解：封装文案行驶中的测试用例，每一条操作步骤为一个方法
业务层：
实现业务流程
"""
from selenium.webdriver.common.by import By

from base.admin.admin_base_page import AdminBasePage


class LoginPage(AdminBasePage):
    def __init__(self):
        super().__init__()
        self.username = (By.NAME, "username")
        self.password = (By.NAME, "password")
        self.code = (By.NAME, "vertify")
        self.submit = (By.NAME, "submit")

    def find_username(self):
        return self.find_elem(self.username)

    def find_password(self):
        return self.find_elem(self.password)

    def find_code(self):
        return self.find_elem(self.code)

    def find_submit(self):
        return self.find_elem(self.submit)


#
class LoginHandle(AdminBasePage):
    def __init__(self):
        super().__init__()
        # 实例化登陆对象，获取其中的元素
        self.login_page = LoginPage()

    def input_username(self, username):
        # 调用父类模拟输入方法，传入的第一个值为元素对象，输入内容
        # 方法调用之后会执行方法/函数其内部的代码，如果需要获取其操作后的结果，一定要加上return
        return self.input_elem(self.login_page.find_username(), username)

    def input_password(self, password):
        return self.input_elem(self.login_page.find_password(), password)

    def input_code(self, code):
        return self.input_elem(self.login_page.find_code(), code)

    def click_submit(self):
        # 找到登陆按钮的元素对象，实现点击的方法
        return self.login_page.find_submit().click()


class LoginPoxy():
    def __init__(self):
        # 不想每次都调用实例方法时，都去创建一个操作层的实例对象
        # 提前创建
        self.login_handle = LoginHandle()

    def login_admin(self, username, password, code):
        self.login_handle.input_username(username)
        self.login_handle.input_password(password)
        self.login_handle.input_code(code)
        self.login_handle.click_submit()
